package com.youlu.campus.web.community.controller;

import com.youlu.campus.web.community.dto.TopicPageResponse;
import com.youlu.campus.web.community.dto.TopicQueryRequest;
import com.youlu.campus.web.community.dto.TopicResponse;
import com.youlu.campus.web.community.dto.TopicVoteRequest;
import com.youlu.campus.web.community.dto.TopicUserResponse;
import com.youlu.campus.web.community.dto.TopicMenuResponse;
import com.youlu.campus.web.community.service.TopicCountService;
import com.youlu.campus.web.community.service.TopicService;
import com.yuelin.infrastructure.quantum.common.QResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 话题管理API控制器
 * 处理话题列表查询、详情查看、热门话题推荐、话题投票及用户参与话题查询等操作
 *
 * @author: YangJ
 * @date: 2020/11/24 18:05
 */
@RestController
public class TopicController {

    @Autowired
    private TopicService topicService;

    @Autowired
    private TopicCountService topicCountService;

    /**
     * 话题列表查询
     * 社区主页显示前4条话题，话题列表页支持分页查询
     * @param request 话题查询请求参数，包含分页信息和筛选条件
     * @return 话题分页列表数据
     */
    @PostMapping("/mini-app/topic/page")
    public QResult topicPage(@RequestBody TopicQueryRequest request){
        return QResult.success(topicService.topicPage(request));
    }

    /**
     * 话题详情查询
     * 查看指定话题的详细信息，用于话题详情页展示
     * @param id 话题ID
     * @return 话题详情数据
     */
    @GetMapping("/mini-app/topic/query")
    public QResult topic(String id){
        return QResult.success(topicService.query(id));
    }

    /**
     * 热门常规话题列表
     * 查询热度最高的4个常规话题，支持话题名称模糊搜索，用于社区发动态时关联话题
     * @param name 话题名称（非必传，用于模糊搜索）
     * @return 热门话题列表
     */
    @GetMapping("/mini-app/topic/hot/list")
    public QResult hotList(String name){
        return QResult.success(topicService.hotList(name));
    }

    /**
     * 话题投票
     * 对社区主页的PK话题进行投票操作
     * @param request 话题投票请求参数，包含话题ID和投票选项等信息
     * @return 投票结果
     */
    @PostMapping("/mini-app/topic/vote")
    public QResult vote(@RequestBody TopicVoteRequest request){
        return QResult.success(topicCountService.vote(request));
    }

    /**
     * 我参与的话题查询
     * 个人主页展示用户参与过的话题列表
     * @param request 话题查询请求参数，包含用户信息和分页条件
     * @return 用户参与的话题列表
     */
    @PostMapping("/mini-app/topic/user")
    public QResult topicUser(@RequestBody TopicQueryRequest request){
        return QResult.success(topicCountService.topicUser(request));
    }

}